// var arr = [1, [2, [3, 4]]];
// function bianpinghua(arr) {
//   return arr.reduce((pre, next) => {
//     return pre.concat(toString.call(next) == '[object Array]' ? bianpinghua(next) : next)
//   }, [])
// }

// function bianpinghua(arr) {
//   arr = arr.toString();
//   return arr.split(",")
// }

// function bianpinghua(arr) {
//   while (arr.some((item) => { return toString.call(item) == '[object Array]' })) {
//     arr = [].concat(...arr)
//   }
//   return arr
// }

// function bianpinghua(arr) {
//   return arr.reduce((pre, next) => {
//     return pre.concat(Array.isArray(next) ? bianpinghua(next) : next)
//   }, [])
// }




// console.log(bianpinghua(arr));

// 对象的扁平化处理
// function objectFlat(obj = {}) {
// const res = {}
// function flat(item, preKey = '') {
//   Object.entries(item).forEach(([key, val]) => {
//     const newKey = preKey ? `${preKey}.${key}` : key
//     if (val && typeof val === 'object') {
//       flat(val, newKey)
//     } else {
//       res[newKey] = val
//     }
//   })
// }
// flat(obj)
// return res
// }

function bingObj(obj) {
  let obj1 = {}
  function demo(obj, newKey = "") {
    for (let key in obj) {
      let key1 = newKey ? `${newKey}${key}` : key
      if (typeof obj[key] == 'object') {
        demo(obj[key], key1)
      } else {
        obj1[key1] = obj[key]
      }
    }
  }
  demo(obj)
  return obj1
}


// 测试
const source = { a: { b: { c: 1, d: 2 }, e: 3 }, f: { g: 2 } }
// 结果 {'a.b.c':1,a.b.d:2,a.e:3,f.g:2}
console.log(bingObj(source));









